前幾篇練的題目大多是「數字陣列」操作,但 C 語言的靈魂之一其實是「字串處理」。
這篇選擇LeetCode 1528 Shuffle String練習,該題可以讓我們熟悉 字元陣列 (char array) 與 指標操作 的結合,知道如何根據索引重新排列字串內容。同時,也能開始理解「陣列」與「字串」在記憶體中的關聯。
🧠 題目說明
給定一個字串 s 和一個整數陣列 indices,重新排列字串中的字元,使得每個字元位於 indices[i] 指定的位置。
範例
輸入:s = "codeleet", indices = [4,5,6,7,0,2,1,3];輸出:"leetcode"
解釋
s[0]='c' 會放到位置 4,s[1]='o' 放到位置 5,依此類推,最後組合成 "leetcode"。
🧩 解題思路
1️⃣ 建立一個新的結果字串陣列
因為重新排列後字元位置改變,不能直接修改原本字串。
所以先配置一個新的字元陣列,用來存放最終結果。
2️⃣ 使用指標操作進行重排
透過 *(indices + i) 取得每個字元的新位置,
再用 *(result + newIndex) = *(s + i) 這樣的方式將字元放入對應位置。
這樣能強化我對「指標位移操作」的理解。
3️⃣ 補上字串結尾符號 '\0'
C 語言的字串必須以 '\0' 結尾,這是非常關鍵的細節。
少了這一步,輸出就會亂掉或造成記憶體錯誤。